public class Histograma {
	/*
	 * Marcamos las posiciones de los puestos en los colas, el valor de 0,
	 * representa libre. Al principio todos los puestos estan libres, el valor
	 * de 1, representa ocupado.
	 */
	int cola_TomadorApuesta[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };// 10
	int cola_Caja[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };// 10

	/* 8 9 10 11 14 15 16 */
	private int Lunes[][] = { { 0, 2, 5, 7, 0, 2, 3 },// EstadoCuenta
			{ 0, 4, 4, 5, 0, 5, 7 } };// Caja
	private int Martes[][] = { { 0, 7, 6, 8, 0, 7, 4 },// EstadoCuenta
			{ 0, 3, 2, 7, 0, 8, 4 } };// Caja
	private int Miercoles[][] = { { 0, 6, 6, 6, 0, 1, 1 },// EstadoCuenta
			{ 0, 4, 3, 7, 0, 7, 5 } };// Caja
	private int Jueves[][] = { { 0, 7, 7, 4, 0, 2, 7 },// EstadoCuenta
			{ 0, 6, 3, 8, 0, 4, 1 } };// Caja
	private int Viernes[][] = { { 0, 2, 2, 5, 0, 0, 3 },// EstadoCuenta
			{ 0, 3, 5, 5, 0, 4, 2 } };// Caja

	/*
	 * Metodo que devuelve si un puesto esta libre u ocupado, recibe como
	 * prmetros la columna y  la posicion a ocupar.
	 */
	public boolean estadoPuesto(int col, int p) {
		boolean respuesta = true;
		int cola = col;
		int pos = p;

		if (cola == 0) {
			if (cola_TomadorApuesta[pos] == 1)
				respuesta = false;
		} else if (cola == 1) {
			if (cola_Caja[pos] == 1)
				respuesta = false;
		}
		return respuesta;
	}

	/* Mtodo para liberar o marcar la posicin indicada de cada cola especfica. */
	public void fijarEstadoPuesto(int co, int po, boolean oc) {
		int cola = co;
		int pos = po;
		boolean ocupar = oc;
		if (cola == 0) {
			if (ocupar == true)
				cola_TomadorApuesta[pos] = 1;
			else
				cola_TomadorApuesta[pos] = 0;
		} else {
			if (ocupar == true)
				cola_Caja[pos] = 1;
			else
				cola_Caja[pos] = 0;
		}
	}

	/*
	 * Llenamos los colas de forma aleatoria, que en un principio estan vacios
	 * con la cantidad de clientes disponibles en estas horas seleccionadas.
	 */
	public void EstadoPuestoInicial(int col, int cantC) {
		int cola = col;
		int cantCli = cantC;

		if (cola == 0) {
			int num = 0;
			while (cantCli > 0) {
				if (estadoPuesto(0, num)) {
					cola_TomadorApuesta[num] = 1;
					cantCli--;
				}
				num++;
			}
		} else if (cola == 1) {
			int num = 0;
			while (cantCli > 0) {
				if (estadoPuesto(1, num)) {
					cola_Caja[num] = 1;
					cantCli--;
				}
				num++;
			}
		}
	}

	/*
	 * Metodo que sirven para obtener la cant. de clientes al Inicio y Final de
	 * las 2 colas. La obtencion se realiza de forma vertical , para cada hora.
	 */
	public int[] getCantidadClientesInicio(int d, int hI) {
		int dia = d;
		int horaI = hI;

		int respuesta[] = new int[2];

		switch (dia) {
		case 0:
			for (int i = 0; i < 2; i++)
				respuesta[i] = Lunes[i][horaI];
			break;
		case 1:
			for (int i = 0; i < 2; i++)
				respuesta[i] = Martes[i][horaI];
			break;
		case 2:
			for (int i = 0; i < 2; i++)
				respuesta[i] = Miercoles[i][horaI];
			break;
		case 3:
			for (int i = 0; i < 2; i++)
				respuesta[i] = Jueves[i][horaI];
			break;
		case 4:
			for (int i = 0; i < 2; i++)
				respuesta[i] = Viernes[i][horaI];
			break;
		default:
			for (int i = 0; i < 2; i++)
				respuesta[i] = 0;
			break;
		}
		return respuesta;
	}

	public int cantClientesEntrantes(int horaini, int horafin) {
		int hi = horaini;
		int hf = horafin + 1;
		int resta = hf - hi;
		int resp = 0;

		if (resta == 1)
			resp = (int) ((Math.random() * 11) + 40);// 40-50 clientes
		else if (resta == 2)
			resp = (int) ((Math.random() * 16) + 70);
		else if (resta == 3)
			resp = (int) ((Math.random() * 11) + 95);
		else if (resta == 4)
			resp = (int) ((Math.random() * 11) + 140);
		return resp;
	}
}
